home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: MegaDisc
/
MegaDisc 27 (1992-03)(MegaDisc Digital Publishing)(AU)(Disk 2 of 2).zip
/
MegaDisc 27 (1992-03)(MegaDisc Digital Publishing)(AU)(Disk 2 of 2).adf
/
Programming
/
DataMaker
/
DM1.bas
< prev
next >
Wrap
BASIC Source File
|
1992-03-30
|
5KB
|
169 lines
REM ************************************
REM * DATAMAKER for the Amiga *
REM * by D.M. Balean, March 1988 *
REM ************************************
REM ******** This section obtains the program parameters ********
PRINT "DATAMAKER" : PRINT
INPUT "Filename of code >" , Codename$
INPUT "Filename for DATA statements >" , dataname$
Items:
INPUT "Number of items(16 bit words) per line >" , item$
item% = VAL(item$)
IF item% > 32 THEN PRINT "ERROR - Maximum is 32 Items" : GOTO Items
INPUT "Hex or Decimal data? H/D >" , a$
IF (UCASE$(a$) = "H") THEN
HFlag = 1
ELSE
HFlag = 0
END IF
ln = 0 : 'initialize count of number of lines
n = 0 : 'initialize count of number of words in code file
OPEN Codename$ FOR INPUT AS #1
OPEN dataname$ FOR OUTPUT AS #2
PRINT : PRINT "Writing DATA line" ;
xp = POS(0) : 'remember cusor position on this line
REM ******** This section writes the generator ********
dataline$ = "REM - DATA STATEMENTS GENERATED FROM " + Codename$
GOSUB Printline
GOSUB Printempty
dataline$ = "PRINT " + CHR$(34) +"FILE GENERATOR" + CHR$(34)
GOSUB Printline
dataline$ = "RESTORE Info : READ item%,n : RESTORE"
GOSUB Printline
dataline$ = "ln = 1 : ' Line number"
GOSUB Printline
dataline$ = "PRINT : PRINT " + CHR$(34) + "Original filename was >"
dataline$ = dataline$ + Codename$ + CHR$(34) + " : PRINT"
GOSUB Printline
dataline$ = "INPUT " + CHR$(34) + "Filename for output >" + CHR$(34)
dataline$ = dataline$ + " , codename$"
GOSUB Printline
dataline$ = "OPEN codename$ FOR OUTPUT AS #1"
GOSUB Printline
dataline$ = "PRINT : PRINT : PRINT " + CHR$(34) + "Processing DATA line"
dataline$ = dataline$ + CHR$(34) + " ; "
GOSUB Printline
dataline$ = "xp = POS(0) : 'remember cursor position on this line"
GOSUB Printline
dataline$ = "FOR number = 1 to n"
GOSUB Printline
dataline$ = "GOSUB Readindata"
GOSUB Printline
dataline$ = "IF i% = item% THEN GOSUB Check"
GOSUB Printline
dataline$ = "IF (ln = INT(n/item%) + 1) AND (number < n) THEN"
GOSUB Printline
dataline$ = " FOR last = number + 1 TO n"
GOSUB Printline
dataline$ = " GOSUB Readindata"
GOSUB Printline
dataline$ = " NEXT last: GOSUB Check : number = n"
GOSUB Printline
dataline$ = "END IF"
GOSUB Printline
dataline$ = "NEXT number : CLOSE"
GOSUB Printline
dataline$ = "PRINT : PRINT " + CHR$(34) + "<<< ALL DONE! >>>"
dataline$ = dataline$ + CHR$(34) + " : END"
GOSUB Printline
GOSUB Printempty
dataline$ = "Readindata:"
GOSUB Printline
dataline$ = "READ word :if word < 0 then word = word + 65536"
GOSUB Printline
dataline$ = "t = t + word : i% = i% + 1"
GOSUB Printline
dataline$ = "hb% = int(word/256) : lb% = word - hb% * 256"
GOSUB Printline
dataline$ = "PRINT #1, CHR$(hb%) ; CHR$(lb%) ;"
GOSUB Printline
dataline$ = "RETURN"
GOSUB Printline
GOSUB Printempty
dataline$ = "Check:"
GOSUB Printline
dataline$ = "LOCATE CSRLIN,xp : PRINT ln ;"
GOSUB Printline
dataline$ = "READ ch : IF t = ch THEN ln = ln + 1 : t = 0 : i% = 0 : RETURN"
GOSUB Printline
dataline$ ="BEEP : PRINT"
GOSUB Printline
dataline$ = "PRINT "+ CHR$(34)
dataline$ = dataline$ + "<<< CHECKSUM ERROR IN LINE" + CHR$(34)
dataline$ = dataline$ + " ; ln ; " +CHR$(34)
dataline$ = dataline$ + " of the DATA statements >>>" + CHR$(34)
GOSUB Printline
dataline$ = "CLOSE : KILL Codename$ : END"
GOSUB Printline
REM ******** This section writes the data statements ********
Newline:
IF ln/10 = INT(ln/10) THEN GOSUB PrintREMnumber
ln = ln + 1
i% = 0 : 'item number on current line
ch = 0 : 'line checksum
dataline$ = "DATA "
Nextdata:
IF EOF(1) THEN DONE
word& = 256& * ASC(INPUT$(1,1))
IF EOF(1) THEN GOSUB Additem : GOTO DONE : ' zero byte added if odd total
word& = word& + ASC(INPUT$(1,1))
GOSUB Additem
IF i% < item% THEN Nextdata
dataline$ = dataline$ + "," + RIGHT$(" " + STR$(ch),7)
GOSUB Printline : GOTO Newline
DONE:
IF i% THEN dataline$ = dataline$ + "," + RIGHT$(" " + STR$(ch),7)
GOSUB Printline
GOSUB Printempty
dataline$ = "Info:"
GOSUB Printline
dataline$ = "DATA " + STR$(item%) + "," + STR$(n)
dataline$ = dataline$ + " : ' number of items /line, /total"
GOSUB Printline
CLOSE
PRINT : PRINT "<<< Done! >>>"
END
Additem:
IF HFlag THEN
word$ = "&H" + RIGHT$("0000" + HEX$(word&), 4)
ELSE
word$ = RIGHT$(" " + STR$(word&),5)
END IF
ch = ch + word&
IF i% THEN dataline$ = dataline$ + ","
n = n + 1 : i% = i% + 1
dataline$ = dataline$ + word$
RETURN
PrintREMnumber:
GOSUB Printempty
dataline$ = "REM <<< Line Number" + STR$(ln + 1) + " >>>"
GOSUB Printline : RETURN
Printempty:
dataline$ = ""
Printline:
IF ln THEN LOCATE CSRLIN,xp : PRINT ln ;
PRINT #2, dataline$
RETURN